class AllGuard:
    def __init__(self, conditions=None):
        if conditions is None:
            conditions = []
        self.conditions = conditions
        self.type = 'all_guard'

    def __call__(self):
        for condition in self.conditions:
            if not condition():
                return False
        return True


class AnyGuard:
    def __init__(self, conditions=None):
        if conditions is None:
            conditions = []
        self.conditions = conditions
        self.type = 'any_guard'

    def __call__(self):
        for condition in self.conditions:
            if condition():
                return True
        return False


class NotGuard:
    def __init__(self, condition=None):
        self.condition = condition
        self.type = 'not_guard'

    def __call__(self):
        if self.condition is None:
            return False
        return not self.condition()
